package com.sxj.corejava.code07_面向对象.bms;

/**
 * @author 石小俊
 * @date 2025年07月22日 13:46
 */
public class Bank {
    // 所有的开户的账户
    static Account[] accounts = new Account[100];
    // 当前已开户账户的总数
    static int count;

    /**
     * 银行的开户方法
     * @param account 在菜单中用户输入的信息
     * @return
     */
    public static boolean register(Account account) {
        if(count < accounts.length){
            accounts[count++] = account;
            return true;
        }
        return false;
    }

    /**
     * 账户登录
     * @param id       卡号
     * @param password 密码
     * @return 当前登录的账户, 如果卡号或者密码错误, 直接返回null即可
     */
    public static Account login(int id, String password) {
        // 遍历当前所有的账户信息,查询是否存在某一个账户其卡号与密码与传递进来的参数一致的
        // 由于accounts数组是一个预计的数组,其中存在大量空数据
        // 因此,我们在遍历的时候不能直接遍历数组,而是应该遍历已开户的所有账户

        for(int i = 0; i < count; i++){
            // 取出当前迭代到的账户
            Account account = accounts[i];
            if(account.getId() == id && password.equals(account.getPassword())){
                // 如果存在某一个账户的卡号与密码与用户输入的一致,说明正确
                // 将该账户返回即可
                return account;
            }
        }
        // 如果所有账户全部遍历结束之后,仍然没有找到与用户输入的卡号密码一致的账户
        // 则说明用户输入的卡号或密码有误
        // 此时没有找到预支对应的账户,直接返回null即可
        return null;
    }

    /**
     * 根据卡号查询对应账户信息
     * @param id
     * @return
     */
    public static Account findById(int id) {
        // 遍历所有已开户的账户
        for(int i =0; i < count; i++){
            // 取出当前迭代的账户
            Account account = accounts[i];
            // 判断当前迭代的账户的卡号是否与传入的卡号一致
            if(id == account.getId()){
                // 返回当前账户信息
                return account;
            }
        }
        // 如果遍历结束仍未找到对应卡号的账户,则说明该卡号不存在,直接返回null
        return null;
    }
}
